大家好,前面已經聊完駭客是怎麼攻擊 AI,今天我們要換個角度,來看看防守方的神兵利器:護欄系統(LLM Guardrails)。
像我們這種寫系統、做整合的人,最關鍵的直覺就是:「不要只指望 AI 本身,而是在 AI 外圍蓋一圈獨立的安全圍牆!」
這圈圍牆就是護欄。不論駭客用什麼花招攻擊,只要他的提示詞被外圍的護欄攔截,就根本傳不到 AI 的耳朵裡。
這對我們正在準備 SecAI+ 證照、或者在實務上想保護系統的人來說,是絕對要弄懂的「外掛式防線」!
簡單來說,LLM 護欄就是獨立於大模型之外的安全控制層。
它就像是 AI 的「安全防火牆」,在我們不信任的外部世界與 AI 之間,畫一條信任邊界(Trust Boundary),站在門口檢查所有人說的話,分為輸入與輸出兩個守備關卡:
使用者輸入 (不信任的外部輸入)
↓
[輸入護欄 Input Rails] ← 擋下惡意攻擊、把個資(PII)發號碼牌
↓
LLM(大模型)
↓
[輸出護欄 Output Rails] ← 檢查 AI 有沒有編造數據、洩漏個資、或格式壞掉
↓
呈現給使用者 (安全的回覆)
🔑 它的運作邏輯其實很直覺:
在我最近讀書準備考試的過程中,我發現輸入護欄可不只是過濾髒話而已,在實務和考題裡,它主要會做這五件事:
這在 OWASP LLM 威脅中高居第一。護欄會先用另一個超快的小模型(比如 Meta 出了名用來防守的 Llama Guard),去掃描使用者的輸入,如果發現裡面有「扮演 DAN、忽略以上指示」等關鍵字,試圖透過惡意文本「劫持」模型、繞過既有安全限制或強行獲取系統 Prompt 的意圖,就直接拒絕。
在實務上,我們最怕員工不小心把客戶個資(PII, Personally Identifiable Information)塞進外部的 AI 裡(比如送去外部 API 運算)。護欄可以在文字送進大模型前,自動對個資進行處理,這有兩種玩法:
[PERSON_1] 換回「陳大明」。[原始輸入] ──(輸入護欄:發號碼牌 Token)──> [去識別化文字] ──> [LLM 幫忙算]
│
[還原陳大明] <──(輸出護欄:收回號碼牌)── [AI吐出PERSON_1] <─────┘
進行意圖分類(Intent Classification)與主題過濾,確保使用者提問與系統業務範圍相符,避免 LLM 被利用於回答無關或敏感話題(如政治、宗教等)。如果你家的 AI 是「銀行客服助理」,護欄一看到使用者問:「哪裡可以買到便宜的虛擬貨幣?」就會直接擋掉,不讓 AI 去聊無關的話題,避免講錯話。
檢測並過濾包含粗言穢語、仇恨言論、暴力、色情或違法行為等不當內容,實施「輸入清洗(Input Sanitization)」,確保輸入端乾淨合規,避免模型在有害脈絡下被誘導講出不該講的話。
如果你的 AI 有連接資料庫(SQL)或用 RAG 讀取本機檔案,駭客可能會在問題裡夾帶「惡意程式碼」。輸入護欄必須對這些輸入進行過濾,防止這些程式碼穿過 AI,對你後台的資料庫或系統造成二次傷害(也就是防止 SQL 注入或網頁 XSS 攻擊)。這就像我們以前寫 Web 系統時,所有使用者輸入都要做過濾一樣!
在 AI 說完話、要把回答傳回給使用者前,輸出護欄會進行最後的安檢:
如果 AI 被人成功越獄了,講出了一些違法的言論,輸出護欄會直接把回答攔截下來,並回覆「抱歉,我無法提供此回答」。
檢查 AI 的回答是不是在胡說八道。在我們企業內部的知識庫(RAG)應用中,輸出護欄會去對照我們給 AI 的參考資料,確認 AI 有沒有自己憑空編造不實數據,確保回答的「事實依據性(Grounding)」。
再次檢查 AI 的回答裡有沒有不小心吐出資料庫裡的個資,防止「模型反轉攻擊」讓個資流出去。同時,如果輸入端有「發號碼牌」,輸出護欄要在這個階段把 [PERSON_1] 還原回「陳大明」,讓使用者看得很順暢。
像我們寫後端開發這麼多年,最怕的就是 API 吐出來的 JSON 格式壞掉,少了一個括號 } 什麼的,後台一 parsing 就直接噴 Error 崩潰。輸出護欄會負責檢查格式,如果發現少個括號,它會自己幫忙補上(自動校正),或者叫 AI 趕快重寫一遍(自動重試),保證後台系統不會 Crash!
這是一個很賊的間接提示注入攻擊。如果駭客在網頁裡藏了一行惡意指示,誘使 AI 在回答中顯示一個隱藏的圖片連結,像是:
當使用者的瀏覽器渲染出這張「隱形圖片」時,使用者的對話紀錄就神不知鬼不覺地傳給駭客了!輸出護欄會主動掃描並過濾掉這種惡意連結,切斷這條偷個資的小通道。
在讀 SecAI+ 考綱和實務資料時,有這四個護欄框架與工具最常被提到:
這是目前開源界最熱門的框架。它的特色是使用一種叫做 Colang 的專屬語言,寫起來就像在寫劇本,直接定義 AI 能講什麼、不能講什麼。
NeMo 主要定義了三種核心護欄:
基於 LLaMA 訓練出來的專屬防禦小模型,專門用來當看門保鏢。它依據安全社群守則(將有害言論、隱私等分為 11 大類),能速度極快地判定輸入和輸出有沒有違規。因為可以部署在我們本機,速度極快、延遲低。
微軟開源的 PII 遮蔽框架。我們以前寫系統,要自己寫 Regex 去抓身分證、信用卡真的很痛苦。Presidio 結合了機器學習,可以自動辨識多國個資,還自帶超強的「對稱符記化」功能,能自動發號碼牌跟收回號碼牌,是想落實「隱私設計(Privacy by Design)」的頂級工具。
一個基於 Python 的開源護欄套件,最擅長透過 Pydantic 來對 LLM 的輸出進行 JSON 格式驗證。格式不對就自動重試或修復,特別適合用來防範系統崩潰。
看到這裡,你可能會想:「只要把護欄蓋好蓋滿,AI 就安全了吧?」
但像我們寫系統這麼多年,資安原則永遠是:「只有千日做賊,哪有千日防賊」。過度依賴 Guardrails 其實有幾個很累人的致命傷:
這也就是為什麼,在 SecAI+ 的觀念裡,Guardrails 絕對不能是唯一的防禦。它只能當作「縱深防禦(Defense in Depth)」的其中一道牆,我們還必須搭配明天要學的「對抗性訓練」,從根本上讓大模型自己的腦袋變聰明、變強壯。
Q: 一家金融機構正在導入 LLM 助理。為防止員工無意間將客戶的個人識別資訊(PII)發送給第三方 AI 服務,團隊應該在將使用者提示發送給大模型之前,採用哪種最有效的技術控制措施?
A. 實施 PII 遮蔽(PII Masking / Anonymization)
B. 限制 API 的速率
C. 對模型進行後門掃描
D. 使用模型浮水印
【正確答案】A
【解析】
防止 PII 發送給第三方、在發送給大模型之前。這兩個線索很明確,就是要在不信任的外部 API 之前,把個資過濾掉,這完全是**輸入護欄(Input Rails)的 PII 遮蔽(Masking)**功能。明天我們要看模型本身的修煉:對抗性訓練與差分隱私。看看我們如何從根本上,訓練出一隻「金剛不壞」的強壯模型。
我們明天見啦!